Langkah Awal
Selamat datang di laman Disbursement API Duitku. API ini hanya bisa digunakan apabila fitur disbursement telah diaktifkan untuk akun Anda. pada halaman ini Duitku menyediakan beberapa fitur diantaranya :
Transfer Online
Proses Transfer Online adalah fitur untuk membantu merchant mentransfer dana secara otomatis melalui API atau Dashboard Duitku. Dan sudah terhubung ke lebih dari 140 bank di Indonesia. Layanan ini tersedia 24 jam/7 hari, dan dapat dilakukan secara real time online. Transfer akan dibatasi dari 50 hingga 100 Juta per transaksi tergantung pada rekening bank penerima.
Clearing
Proses Clearing adalah fitur untuk membantu merchant melakukan Clearing dana secara otomatis melalui API atau Dashboard Duitku berdasarkan jenis integrasi yang disediakan.
Ada empat jenis integrasi clearing :
LLG (Lalu Lintas Giro) Transfer LLG, transfer antar bank yang mencakup lebih dari 130 bank di Indonesia. Jumlah maksimal transaksi yaitu Rp 1.000.000.000. Proses transfer mengikuti jadwal BI (Bank Indonesia), untuk jadwal transfer yaitu 8.00 – 15.00 pada hari kerja.
RTGS (Real-Time Gross Settlement) Transfer RTGS, transfer antar bank yang mencakup lebih dari 130 bank di Indonesia. Jumlah minimum transaksi Rp 100.000.000. Proses transfer mengikuti jadwal BI (Bank Indonesia), untuk jadwal transfer yaitu 8.00 – 15.00 pada hari kerja.
H2H (Bank Host to Host) Duitku Host to Host koneksi ke bank, untuk memastikan koneksi langsung dan keandalan yang lebih baik. Saat ini hanya mendukung 5 Bank Besar di Indonesia (BNI, BRI, Mandiri, Permata, CIMB), untuk jadwal transfer mengikuti jadwal masing-masing bank.
BI FAST (Bank Indonesia Fast Payment) Pembayaran ritel nasional yang dapat memfasilitasi pembayaran ritel secara real-time, aman, efisien, biaya layanan yang lebih terjangkau dan layanan setiap saat (24/7).
Cash Out
Proses Cash Out adalah fitur untuk membantu merchant melakukan penarikan dana secara otomatis melalui API atau Dashboard Duitku. Saat ini hanya didukung oleh 2 channel, yaitu POS Indonesia dan Indomaret.
Transfer Online
API ini menyediakan beberapa fungsi utama, antara lain:
- Inquiry Request
- Transfer Request
- Pengecekan Status Transfer
- Check Balance
- Daftar Bank
Untuk memudahkan integrasi, kami menyediakan Postman Collection yang dapat merchant gunakan untuk melakukan uji coba request dan response API kami.
Alur Transaksi Transfer Online
Proses pencairan terdiri dari dua langkah utama: inquiry (disbursement inquiry API) dan transfer (disbursement transfer API). Sebelum melakukan transfer, pastikan saldo merchant mencukupi, API kami akan melakukan validasi ketersedian sebelum menjalankan proses. Dua API tambahan lainnya adalah check balance API yang membantu memeriksa saldo merchant saat ini dan inquiry status API untuk memeriksa status transaksi saat ini (misalnya, berhasil atau gagal).
Transfer Online Inquiry Request
Langkah pertama pada proses disbursement diawali dengan melakukan inquiry ke sistem Duitku. Anda dapat membuat permintaan disbursement dengan membuat inquiry menggunakan API ini.
Method : HTTP POST
Type : application/json
Development : https://sandbox.duitku.com/webapi/api/disbursement/inquirysandbox
Production : https://passport.duitku.com/webapi/api/disbursement/inquiry
Request Parameters
{
"userId": 3551,
"amountTransfer" : 50000,
"bankAccount" : "8760673566",
"bankCode" : "014",
"email":"[email protected]",
"purpose" : "test inquiry disbursement",
"timestamp":1637304586325,
"senderId" : 1234567890,
"senderName" : "john doe",
"signature":"d69db71fa1188a0d484a658692421d61d343454bd41a5f52d6b0569ff2b53c34"
}
<?php
$userId = 3551;
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$amountTransfer = 50000;
$bankAccount = '8760673566';
$bankCode = '014';
$email = '[email protected]';
$purpose = 'Test Disbursement with duitku';
$timestamp = round(microtime(true) * 1000);
$senderId = 123456789;
$senderName = 'John Doe';
$paramSignature = $email . $timestamp . $bankCode . $bankAccount . $amountTransfer . $purpose . $secretKey;
$signature = hash('sha256', $paramSignature);
$params = array(
'userId' => $userId,
'amountTransfer' => $amountTransfer,
'bankAccount' => $bankAccount,
'bankCode' => $bankCode,
'email' => $email,
'purpose' => $purpose,
'timestamp' => $timestamp,
'senderId' => $senderId,
'senderName' => $senderName,
'signature' => $signature
);
$params_string = json_encode($params);
$url = 'https://sandbox.duitku.com/webapi/api/disbursement/inquirysandbox'; // Sandbox
// $url = 'https://passport.duitku.com/webapi/api/disbursement/inquiry'; // Production
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params_string))
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//execute post
$request = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 200)
{
$result = json_decode($request, true);
header('location: '. $result['paymentUrl']);
echo "email :". $result['email'] . "<br />";
echo "bankCode :". $result['bankCode'] . "<br />";
echo "bankAccount :". $result['bankAccount'] . "<br />";
echo "amountTransfer :". $result['amountTransfer'] . "<br />";
echo "accountName :". $result['accountName'] . "<br />";
echo "custRefNumber :". $result['custRefNumber'] . "<br />";
echo "disburseId :". $result['disburseId'] . "<br />";
echo "responseCode :". $result['responseCode'] . "<br />";
echo "responseDesc :". $result['responseDesc'] . "<br />";
}
else
echo $httpCode;
?>
Parameter | Tipe | Wajib | Deskripsi | Contoh |
---|---|---|---|---|
userId | int | Y |
ID merchant, didapatkan setelah fitur disbursement diaktifkan oleh Duitku. | 3551. |
amountTransfer | int | Y |
Jumlah uang yang akan ditransfer (tanpa kode desimal dan tanpa digit desimal). | 50000. |
bankAccount | string(255) | Y |
Nomor rekening bank. | Untuk testing bankAccount bisa dilihat disini. |
bankCode | string(3) | Y |
Kode bank tujuan atau bank penerima. | Daftar bankCode bisa dilihat disini. |
string(255) | Y |
Email merchant yang dipakai untuk registrasi Duitku. | [email protected]. | |
purpose | string(255) | N |
Berita atau pesan dari transaksi. | Test Transfer Online Inquiry with duitku. |
timestamp | double | Y |
Unix Timestamp dalam miliseconds. | 1506486841000. |
senderId | int | N |
Customer Id dari merchant. | 123456789. |
senderName | string(255) | N |
Nama customer. | |
signature | string(255) | Y |
Kode identifikasi transaksi. Berisikan parameter-parameter transaksi yang di hash menggunakan metode hashing SHA256. | Formula: SHA256(email + timestamp + bankCode + bankAccount + amountTransfer + purpose + secretKey). |
{
"email": "[email protected]",
"bankCode": "014",
"bankAccount": "8760673566",
"amountTransfer": 50000.0,
"accountName": "Test Account",
"custRefNumber": "000000001278",
"disburseId": 12345,
"responseCode": "00",
"responseDesc": "Success"
}
Response Parameter
Parameter | Tipe | Deskripsi | Contoh |
---|---|---|---|
string | Email yang dikirimkan saat proses inquiry. | [email protected]. | |
bankCode | string | Kode bank yang dikirimkan saat proses inquiry. | 014 (contoh untuk BCA). |
bankAccount | string | Nomor rekening bank yang dikirimkan saat proses inquiry. | Untuk testing bankAccount bisa dilihat disini. |
amountTransfer | int | Jumlah yang dikirimkan saat proses inquiry. | 50000. |
accountName | string | Nama pemilik rekening tujuan | Test Account. |
custRefNumber | string | 9 Digit Nomor referensi pelanggan yang akan dicetak ketika transaksi berhasil. | 123456789. |
disburseId | string | Disbursement ID dari duitku. Mohon untuk menyimpan nomor ini untuk keperluan pengecekan. | |
responseCode | string | Kode respons dari Duitku. Detail dan deskripsi kode respons dapat dilihat disini. | |
responseDesc | string | Deskripsi dari kode respons. |
Transfer Online Transfer Request
Setelah mendapat response sukses dari inquiry, maka langkah selanjutnya yaitu mengirimkan data yang diperlukan untuk disbursement transfer. Berikut data yang diperlukan API disbursement transfer.
Method : HTTP POST
Type : application/json
Development : https://sandbox.duitku.com/webapi/api/disbursement/transfersandbox
Production : https://passport.duitku.com/webapi/api/disbursement/transfer
Request Parameters
{
"disburseId": "12345",
"userId": 3551,
"email":"[email protected]",
"bankCode" : "014",
"bankAccount" : "8760673566",
"amountTransfer" : 50000,
"accountName": "Test Account",
"custRefNumber": "000000001278",
"purpose" : "Test Disbursement with duitku",
"timestamp":1637307215965,
"signature":"318db51f8e92e9d5c0e3152c9087815e1098fcbfe1a52825ec12a4ce704df8a7"
}
<?php
$disburseId = '12345';
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$userId = 3551;
$email = '[email protected]';
$bankCode = '014';
$bankAccount = '8760673566';
$amountTransfer = 50000;
$accountName = 'Test Account';
$custRefNumber = '000000001278';
$purpose = 'Test Disbursement with duitku';
$timestamp = round(microtime(true) * 1000);
$paramSignature = $email . $timestamp . $bankCode . $bankAccount . $accountName . $custRefNumber . $amountTransfer . $purpose . $disburseId . $secretKey;
$signature = hash('sha256', $paramSignature);
$params = array(
'disburseId' => $disburseId,
'userId' => $userId,
'email' => $email,
'bankCode' => $bankCode,
'bankAccount' => $bankAccount,
'amountTransfer' => $amountTransfer,
'accountName' => $accountName,
'custRefNumber' => $custRefNumber,
'purpose' => $purpose,
'timestamp' => $timestamp,
'signature' => $signature
);
$params_string = json_encode($params);
$url = 'https://sandbox.duitku.com/webapi/api/disbursement/transfersandbox'; // Sandbox
// $url = 'https://passport.duitku.com/webapi/api/disbursement/transfer'; // Production
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params_string))
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//execute post
$request = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 200)
{
$result = json_decode($request, true);
header('location: '. $result['paymentUrl']);
echo "email :". $result['email'] . "<br />";
echo "bankCode :". $result['bankCode'] . "<br />";
echo "bankAccount :". $result['bankAccount'] . "<br />";
echo "amountTransfer :". $result['amountTransfer'] . "<br />";
echo "accountName :". $result['accountName'] . "<br />";
echo "custRefNumber :". $result['custRefNumber'] . "<br />";
echo "responseCode :". $result['responseCode'] . "<br />";
echo "responseDesc :". $result['responseDesc'] . "<br />";
}
else
echo $httpCode;
?>
Parameter | Tipe | Wajib | Deskripsi | Contoh |
---|---|---|---|---|
disburseId | string(255) | Y |
Disbursement ID dari Duitku, diperoleh setelah mendapat response dari proses inquiry. | 12345. |
userId | int | Y |
User Id yang dikirimkan ketika inquiry. | 3551. |
string(255) | Y |
Email yang dikirimkan saat proses inquiry. | [email protected]. | |
bankCode | string(3) | Y |
Kode bank yang dikirimkan saat proses inquiry. | Daftar bankCode bisa dilihat disini. |
bankAccount | string(255) | Y |
Nomor rekening bank yang dikirimkan saat proses inquiry. | Untuk testing bankAccount bisa dilihat disini. |
amountTransfer | int | Y |
Jumlah uang yang dikirimkan saat proses inquiry. | 50000. |
accountName | string(255) | Y |
Nama pemilik rekening tujuan, diperoleh setelah mendapat response dari proses inquiry. | Test Account. |
custRefNumber | string(255) | Y |
Nomor referensi pelanggan, diperoleh setelah mendapat response dari proses inquiry. | 000000001278. |
purpose | string(255) | Y |
Deskripsi dari tujuan transfer. | Test Transfer online With Duitku. |
timestamp | double | Y |
Unix Timestamp dalam miliseconds. | 1507024378000. |
signature | string(255) | Y |
Kode identifikasi transaksi. Berisikan parameter-parameter transaksi yang di hash menggunakan metode hashing SHA256. | Formula: SHA256(email + timestamp + bankCode + bankAccount + accountName + custRefNumber + amountTransfer + purpose + disburseId + secretKey). |
Response Parameter
{
"email": "[email protected]",
"bankCode": "014",
"bankAccount": "8760673566",
"amountTransfer": 50000.0,
"accountName": "Test Account",
"custRefNumber": "000000001278",
"responseCode": "00",
"responseDesc": "Success"
}
Parameter | Tipe | Deskripsi | Contoh |
---|---|---|---|
string | Email yang dikirimkan saat proses inquiry. | [email protected]. | |
bankCode | string | Kode bank yang dikirimkan saat proses inquiry. | 014 (contoh untuk BCA). |
bankAccount | string | Nomor rekening bank yang dikirimkan saat proses inquiry. | Untuk testing bankAccount bisa dilihat disini. |
amountTransfer | int | Jumlah yang dikirimkan saat proses inquiry. | 50000. |
accountName | string | Nama pemilik rekening tujuan, diperoleh setelah mendapat response dari proses inquiry. | Test Account. |
custRefNumber | string | 9 Digit Nomor referensi pelanggan yang akan dicetak ketika transaksi berhasil. | 123456789. |
responseCode | string | Kode respons dari Duitku. Detail dan deskripsi kode respons dapat dilihat disini. | |
responseDesc | string | Deskripsi dari kode respons. |
Clearing
API ini menyediakan beberapa fungsi utama, antara lain:
- Inquiry Request
- Transfer Request
- Clearing Callback
Untuk memudahkan integrasi, kami menyediakan Postman Collection yang dapat merchant gunakan untuk melakukan uji coba request dan response API kami.
Alur Transaksi Clearing
Proses clearing terdiri dari dua langkah utama: inquiry (clearing inquiry API) dan transfer (clearing transfer API). Sebelum melakukan transfer, pastikan saldo merchant mencukupi, API kami akan melakukan validasi ketersedian sebelum menjalankan proses. API tambahan lainnya adalah callback API yang membantu memeriksa status transaksi saat ini berupa respon callback.
Clearing Inquiry Request
Method : HTTP POST
Type : application/json
Development: https://sandbox.duitku.com/webapi/api/disbursement/inquiryclearingsandbox
Production : https://passport.duitku.com/webapi/api/disbursement/inquiryclearing
{
"userId": 3551,
"email":"[email protected]",
"bankCode": "014",
"bankAccount": "8760673466",
"amountTransfer": 500000000,
"custRefNumber": "000000001278",
"senderName": "john doe",
"senderId": 12345789,
"purpose" : "Test Clearing Inquiry with duitku",
"type": "RTGS",
"timestamp": 1637305389875,
"signature": "6e16c528fd9e4b9615aa4eb3487bdebd526efbcb974eff2e09ba5bf700c97efd"
}
<?php
$userId = 3551;
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$email = '[email protected]';
$bankCode = '014';
$bankAccount = '8760673466';
$amountTransfer = 500000000;
$custRefNumber = '12345789';
$senderName = 'John Doe';
$senderId = 12345789;
$purpose = 'Test Clearing Inquiry with duitku';
$type = 'RTGS';
$timestamp = round(microtime(true) * 1000);
$paramSignature = $email . $timestamp . $bankCode . $type . $bankAccount . $amountTransfer . $purpose . $secretKey;
$signature = hash('sha256', $paramSignature);
$params = array(
'userId' => $userId,
'email' => $email,
'bankCode' => $bankCode,
'bankAccount' => $bankAccount,
'amountTransfer' => $amountTransfer,
'custRefNumber' => $custRefNumber,
'senderId' => $senderId,
'senderName' => $senderName,
'purpose' => $purpose,
'type' => $type,
'timestamp' => $timestamp,
'signature' => $signature
);
$params_string = json_encode($params);
//$url = 'https://passport.duitku.com/webapi/api/disbursement/inquiryclearing'
$url = 'https://sandbox.duitku.com/webapi/api/disbursement/inquiryclearingsandbox'
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params_string))
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//execute post
$request = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 200)
{
$result = json_decode($request, true);
header('location: '. $result['paymentUrl']);
echo "email :". $result['email'] . "<br />";
echo "bankCode :". $result['bankCode'] . "<br />";
echo "bankAccount :". $result['bankAccount'] . "<br />";
echo "amountTransfer :". $result['amountTransfer'] . "<br />";
echo "accountName :". $result['accountName'] . "<br />";
echo "custRefNumber :". $result['custRefNumber'] . "<br />";
echo "disburseId :". $result['disburseId'] . "<br />";
echo "type :". $result['type'] . "<br />";
echo "responseCode :". $result['responseCode'] . "<br />";
echo "responseDesc :". $result['responseDesc'] . "<br />";
}
else
echo $httpCode;
?>
Request Parameter
Parameter | Tipe | Wajib | Deskripsi | Contoh |
---|---|---|---|---|
userId | int | Y |
ID Merchant, didapatkan setelah fitur disbursement diaktifkan oleh Duitku. | 3551. |
string(255) | Y |
Email merchant yang digunakan saat registrasi Duitku. | [email protected]. | |
bankCode | string(3) | Y |
Kode bank tujuan. | Daftar bankCode bisa dilihat disini. |
bankAccount | string(255) | Y |
Nomor rekening bank tujuan. | Untuk testing bankAccount bisa dilihat disini. |
amountTransfer | int | Y |
Jumlah uang yang akan ditransfer (tanpa kode desimal dan tanpa digit desimal). | 50000. |
custRefNumber | string(9) | N |
9 Digit Nomor Referensi untuk customer. | 12345789. |
senderName | string(255) | N |
Nama customer. | John Doe |
senderId | int | N |
Customer Id dari merchant. | 12345789. |
purpose | string(255) | N |
Deskripsi dari tujuan transaksi. | Test Clearing Inquiry dengan duitku |
type | string | Y |
LLG, RTGS, H2H atau BIFAST. | RTGS. |
timestamp | double | Y |
Unix Timestamp dalam miliseconds. | 1506486841000. |
signature | string(255) | Y |
Kode identifikasi transaksi. Berisikan parameter-parameter transaksi yang di hash menggunakan metode hashing SHA256. | Formula: SHA256(email + timestamp + bankCode + type + bankAccount + amountTransfer + purpose + secretKey). |
{
"email": "[email protected]",
"bankCode": "014",
"bankAccount": "8760673466",
"amountTransfer": 500000000.0,
"accountName": "Test Account",
"custRefNumber": "000000001278",
"disburseId": 125324342,
"type": "RTGS",
"responseCode": "00",
"responseDesc": "Success"
}
Response Parameter
Parameter | Tipe | Deskripsi | Contoh |
---|---|---|---|
string | Email yang dikirimkan saat proses Inquiry. | [email protected]. | |
bankCode | string | Kode bank yang dikirimkan saat proses Inquiry. | 014 (contoh untuk BCA). |
bankAccount | string | Nomor rekening bank tujuan. | Untuk testing bankAccount bisa dilihat disini. |
amountTransfer | int | Jumlah yang dikirimkan saat proses Inquiry. | 500000000. |
custRefNumber | string | 9 Digit Nomor referensi pelanggan yang akan dicetak ketika transaksi berhasil. | 12345789. |
accountName | string | Nama akun tujuan. | Test Account. |
disburseId | string | Disbursement ID dari duitku. Mohon untuk menyimpan nomor ini untuk keperluan pengecekan. | |
type | string | Tipe yang dikirimkan saat proses Inquiry. | RTGS/LLG/H2H/BIFAST. |
responseCode | string | Kode respons dari Duitku. Detail dan deskripsi kode respons dapat dilihat disini. | |
responseDesc | string | Deskripsi dari kode respons. |
Clearing Transfer Request
Method : HTTP POST
Type : application/json
Development: https://sandbox.duitku.com/webapi/api/disbursement/transferclearingsandbox
Production : https://passport.duitku.com/webapi/api/disbursement/transferclearing
Request Parameters
{
"disburseId": "12345",
"userId": 3551,
"email":"[email protected]",
"bankCode" : "014",
"bankAccount" : "8760673466",
"amountTransfer" : 50000000,
"accountName": "Test Account",
"custRefNumber": "000000001278",
"purpose" : "Test Clearing Inquiry with duitku",
"type": "RTGS",
"timestamp":1637304586325,
"signature":"d69db71fa1188a0d484a658692421d61d343454bd41a5f52d6b0569ff2b53c34"
}
<?php
$disburseId = '12345';
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$userId = 3551;
$email = '[email protected]';
$bankCode = '014';
$bankAccount = '8760673466';
$amountTransfer = 500000000;
$accountName = 'Test Account';
$custRefNumber = '000000001278';
$purpose = 'Test Clearing Inquiry with duitku';
$type = 'RTGS';
$timestamp = round(microtime(true) * 1000);
$paramSignature = $email . $timestamp . $bankCode . $type . $bankAccount . $accountName . $custRefNumber . $amountTransfer . $purpose . $disburseId . $secretKey;
$signature = hash('sha256', $paramSignature);
$params = array(
'disburseId' => $disburseId,
'userId' => $userId,
'email' => $email,
'bankCode' => $bankCode,
'bankAccount' => $bankAccount,
'amountTransfer' => $amountTransfer,
'accountName' => $accountName,
'custRefNumber' => $custRefNumber,
'type' => $type,
'purpose' => $purpose,
'timestamp' => $timestamp,
'signature' => $signature
);
$params_string = json_encode($params);
$url = `https://sandbox.duitku.com/webapi/api/disbursement/transferclearingsandbox`
//$url = `https://passport.duitku.com/webapi/api/disbursement/transferclearing`
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params_string))
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//execute post
$request = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 200)
{
$result = json_decode($request, true);
header('location: '. $result['paymentUrl']);
echo "email :". $result['email'] . "<br />";
echo "bankCode :". $result['bankCode'] . "<br />";
echo "bankAccount :". $result['bankAccount'] . "<br />";
echo "amountTransfer :". $result['amountTransfer'] . "<br />";
echo "accountName :". $result['accountName'] . "<br />";
echo "custRefNumber :". $result['custRefNumber'] . "<br />";
echo "type :". $result['type'] . "<br />";
echo "responseCode :". $result['responseCode'] . "<br />";
echo "responseDesc :". $result['responseDesc'] . "<br />";
}
else
echo $httpCode;
?>
Parameter | Tipe | Wajib | Deskripsi | Contoh |
---|---|---|---|---|
disburseId | string(255) | Y |
Disbursement ID dari Duitku, diperoleh setelah mendapat response dari proses inquiry. | 12345. |
userId | int | Y |
User Id yang dikirimkan saat proses inquiry. | 3551. |
string(255) | Y |
Email yang dikirimkan saat proses inquiry. | [email protected]. | |
bankCode | string(3) | Y |
Kode bank yang dikirimkan saat proses inquiry. | Daftar bankCode bisa dilihat disini. |
bankAccount | string(255) | Y |
Nomor rekening bank yang dikirimkan saat proses inquiry. | Untuk testing bankAccount bisa dilihat disini. |
amountTransfer | int | Y |
Jumlah uang yang dikirimkan saat proses inquiry. | 500000000. |
accountName | string(255) | Y |
Nama pemilik rekening tujuan yang dikirimkan saat proses inquiry. | John Doe. |
custRefNumber | string(255) | Y |
Nomor referensi pelanggan, diperoleh setelah mendapat response dari proses inquiry. | 12345789. |
purpose | string(255) | N |
Deskripsi dari tujuan transaksi. | Test Clearing Inquiry with duitku. |
type | string | Y |
LLG, RTGS, H2H atau BIFAST. | RTGS. |
timestamp | double | Y |
Unix Timestamp dalam miliseconds. | 1506486841000. |
signature | string(255) | Y |
Kode identifikasi transaksi. Berisikan parameter-parameter transaksi yang di hash menggunakan metode hashing SHA256. | Formula: SHA256(email + timestamp + bankCode + type + bankAccount + accountName + custRefNumber + amountTransfer + purpose + disburseId + secretKey). |
Response Parameters
{
"email": "[email protected]",
"bankCode": "014",
"bankAccount": "8760673466",
"amountTransfer": 500000000.0,
"accountName": "Test Account",
"custRefNumber": "000000001278",
"type": "RTGS",
"responseCode": "00",
"responseDesc": "Success"
}
Parameter | Tipe | Deskripsi | Contoh |
---|---|---|---|
string | Email yang dikirimkan saat proses request. | [email protected]. | |
bankCode | string | Kode bank yang dikirimkan saat proses request. | 014 (contoh untuk BCA). |
bankAccount | string | Nomor rekening bank yang dikirimkan saat proses request. | Untuk testing bankAccount bisa dilihat disini. |
amountTransfer | int | Jumlah uang yang dikirimkan saat proses request. | 50000000. |
accountName | string | Nama pemilik rekening tujuann yang dikirimkan saat proses request. | Test Account. |
custRefNumber | string | 9 Digit nomor referensi pelanggan yang dikirimkan saat proses request. | 000000001278. |
type | string | Tipe yang dikirimkan saat proses request. | RTGS/LLG/H2H/BIFAST. |
responseCode | string | Kode respons dari Duitku. Detail dan deskripsi kode respons dapat dilihat disini. | |
responseDesc | string | Deskripsi dari kode respons. |
Clearing Callback
Duitku akan mengirimkan respon berupa return value berbentuk HTTP POST. Merchant diminta untuk menyediakan satu laman untuk menerima hasil dari respon callback dari Duitku.
<?php
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$json = file_get_contents('php://input');
$result = json_decode(stripslashes($json),true);
$disburseId = $result['disburseId'];
$userId = $result['userId'];
$email = $result['email'];
$bankCode = $result['bankCode'];
$bankAccount = $result['bankAccount'];
$amountTransfer = $result['amountTransfer'];
$accountName = $result['accountName'];
$custRefNumber = $result['custRefNumber'];
$statusCode = $result['statusCode'];
$statusDesc = $result['statusDesc'] ;
$errorMessage = $result['errorMessage'];
$signature = $result['signature'];
if(!empty($email) && !empty($bankCode) && !empty($bankAccount) && !empty($accountName) && !empty($custRefNumber) && !empty($amountTransfer) && !empty($disburseId) && !empty($signature))
{
$params = $email . $bankCode . $bankAccount . $accountName . $custRefNumber . $amountTransfer . $disburseId . $secretKey;
$calcSignature = hash('sha256', $params);
if($signature == $calcSignature)
{
//Your code here
echo "SUCCESS"; // Please response with success
}
else
{
throw new Exception('Bad Signature');
}
}else
{
throw new Exception('Bad Parameter');
}
?>
Parameter
Callback hanya untuk type H2H.
Method : HTTP POST
Type : application/json
Parameter | Tipe | Deskripsi |
---|---|---|
disburseId | String(255) | Disbursement ID dari Duitku, diperoleh setelah mendapat response dari proses inquiry. |
userId | int | ID merchant, didapatkan setelah fitur disbursement diaktifkan oleh Duitku. |
string(255) | Email merchant yang dipakai untuk registrasi Duitku. | |
bankCode | string(3) | Kode bank tujuan : 014 (BCA). |
Daftar bankCode bisa dilihat disini. | ||
bankAccount | string(255) | Nomor rekening bank tujuan. |
amountTransfer | int | Jumlah nominal transaksi. Tanpa kode desimal (.) dan tanpa digit desimal. |
accountName | string(255) | Nama pemegang rekening tujuan. |
custRefNumber | string(255) | Nomor referensi pelanggan. |
statusCode | string(255) | Kode status 00 = Berhasil. Detail dan deskripsi kode respons dapat dilihat disini. |
statusDesc | string(255) | Deskripsi dari status code. |
errorMessage | string(255) | Deskripsi Error jika Failed atau Pending. |
signature | string(255) | Formula: SHA256(email + bankCode + bankAccount + accountName + custRefNumber + amountTransfer + disburseId + secretKey). |
Cash Out
Inquiry cash out digunakan untuk melakukan penarikan dana pada sistem Duitku. API ini menyediakan beberapa fungsi utama, antara lain:
- Inquiry Request
- Callback
Untuk memudahkan integrasi, kami menyediakan Postman Collection yang dapat merchant gunakan untuk melakukan uji coba request dan response API kami.
Alur Transaksi Cash Out
- Proses Cash Out diawali dengan user melakukan proses request withdraw ke merchant.
- merchant kemudian melakukan inquiry dengan parameter yang telah disediakan oleh Duitku.
- Duitku akan menyesuaikan ketersediaan dan mengirimkan permintaan berupa request token kepada vendor.
- Server duitku kemudian memberikan respon berisikan informasi terkait token yang dikirimkan oleh vendor.
- Informasi terkait token yang akan digunakan dikirim berupa SMS untuk proses cash out.
- User kemudian bisa melakukan proses cash out ke Pos indonesia/Indomaret menggunakan token yang telah diterima.
- Merchant akan menerima respon berupa callback yang dikirimkan oleh vendor melalui server Duitku.
Cash Out Inquiry Request
Method : HTTP POST
Type : application/json
Development : https://disbursement-sandbox.duitku.com/api/cashout/inquiry
Production : https://disbursement.duitku.com/api/cashout/inquiry
Request Parameters
<?php
$userId = 3551;
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$amountTransfer = 50000;
$custRefNumber = '000000857846';
$bankCode = '2010';
$accountName = 'Test Account';
$accountAddress = 'Jl. Raya Perjuangan 1, RT.3/RW.7, Kb. Jeruk';
$accountIdentity = '1234567889';
$email = '[email protected]',
$phoneNumber = '082211789110';
$purpose = 'Test inquiry CashOut';
$timestamp = round(microtime(true) * 1000);
$callbackUrl = 'http://example.com/callback';
$paramSignature = $email . $timestamp . $amountTransfer . $purpose . $secretKey;
$signature = hash('sha256', $paramSignature);
$params = array(
'userId' => $userId,
'amountTransfer' => $amountTransfer,
'custRefNumber' => $custRefNumber,
'bankCode' => $bankCode,
'accountName' => $accountName,
'accountAddress' => $accountAddress,
'accountIdentity' => $accountIdentity,
'email' => $email,
'phoneNumber' => $phoneNumber,
'purpose' => $purpose,
'timestamp' => $timestamp,
'callbackUrl' => $callbackUrl,
'signature' => $signature
);
$params_string = json_encode($params);
$url = 'https://disbursement-sandbox.duitku.com/api/cashout/inquiry'; // Sandbox
// $url = 'https://disbursement.duitku.com/api/cashout/inquiry'; // Production
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params_string))
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//execute post
$request = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 200)
{
$result = json_decode($request, true);
echo "disburseId :". $result['disburseId'] . "<br />";
echo "amountTransfer:". $result['amountTransfer'] . "<br />";
echo "custRefNumber :". $result['custRefNumber'] . "<br />";
echo "accountName :". $result['accountName'] . "<br />";
echo "email :". $result['email'] . "<br />";
echo "phoneNumber :". $result['phoneNumber'] . "<br />";
echo "token :". $result['token'] . "<br />";
echo "pin :". $result['pin'] . "<br />";
echo "responseCode :". $result['responseCode'] . "<br />";
echo "responseDesc :". $result['responseDesc'] . "<br />";
}
else
echo $httpCode;
?>
{
"userId" : 3551,
"amountTransfer" : 50000,
"custRefNumber" : "000000857846",
"bankCode" : "2010",
"accountName" : "Test Account",
"accountAddress" : "Jl. Raya Perjuangan 1, RT.3/RW.7, Kb. Jeruk",
"accountIdentity" : "1234567889",
"email" : "[email protected]",
"phoneNumber" : "082211789110",
"purpose" : "Test inquiry CashOut",
"timestamp" : 1627963118867,
"callbackUrl":"http:\/\/example.com\/callback",
"signature" : "c2d35814d6ab9f6b0e745201191736920a57c8bad2733c12eb5dc5adf0989abe"
}
Parameter | Tipe | Wajib | Deskripsi |
---|---|---|---|
userId | int | Y |
merchant ID, didapatkan setelah fitur disbursement diaktifkan oleh Duitku. |
amountTransfer | int | Y |
Tanpa kode desimal dan tanpa digit desimal. |
Untuk Indomaret: • Kelipatan dari 50.000. • Min 50.000. • Maks 1.000.000. |
|||
Untuk Pos Indonesia: • Min 50.000. • Maks 2.000.000. |
|||
custRefNumber | string(255) | N |
Nomor referensi pelanggan. |
bankCode | string | Y |
Kode bank tujuan atau bank penerima: |
• bankCode 2010 untuk Indomaret. • bankCode 2011 untuk Pos Indonesia. |
|||
accountName | string(255) | Y |
Nama pelanggan. |
accountAddress | string(255) | N |
Alamat pelanggan. |
accountIdentity | string(255) | Y |
Nomor KTP pelanggan. |
string(255) | Y |
Email merchant yang dipakai untuk registrasi Duitku. | |
phoneNumber | string(50) | Y |
Nomor telepon pelanggan. Untuk testing phoneNumber bisa dilihat disini. |
timestamp | double | Y |
Unix Timestamp dalam miliseconds. |
purpose | string(255) | N |
Deskripsi dari tujuan transaksi. |
callbackUrl | string(255) | N |
Url untuk callback transaksi. |
signature | string(255) | Y |
Formula: SHA256(email + timestamp + amountTransfer + purpose + secretKey). |
Response Parameters
{
"disburseId" : 682069,
"amountTransfer": 50000,
"custRefNumber" : "000000857846",
"accountName" : "Test Account",
"email" : "[email protected]",
"phoneNumber" : "085718159196",
"token" : 230426073103,
"pin" : "902607",
"responseCode" : "00",
"responseDesc" : "Success"
}
Parameter | Tipe | Deskripsi |
---|---|---|
disburseId | int | Disbursement ID dari Duitku, diperoleh setelah mendapat response dari proses inquiry. |
amountTransfer | int | Tanpa kode desimal dan tanpa digit desimal. |
Untuk Indomaret: • Kelipatan dari 50.000. • Min 50.000. • Maks 1.000.000. |
||
Untuk Pos Indonesia: • Min 50.000. • Maks 2.000.000. |
||
custRefNumber | string | Nomor referensi pelanggan. |
string | Email merchant yang dipakai untuk registrasi Duitku. | |
accountName | string | Nama rekening tujuan. |
phoneNumber | string | Nomor telepon pelanggan. Untuk testing phoneNumber bisa dilihat disini. |
token | double | Token yang didapatkan dari Duitku. |
pin | string | Khusus untuk pembayaran Pos Indonesia. |
responseCode | string | Kode status 00 = Berhasil. Detail list yang tersedia dapat dilihat disini. |
responseMessage | string | Deskripsi Response code. |
Cash Out Callback
Duitku akan mengirimkan respon berupa return value berbentuk HTTP POST. Merchant diminta untuk menyediakan satu laman untuk menerima hasil dari respon callback dari Duitku.
<?php
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$json = file_get_contents('php://input');
$result = json_decode(stripslashes($json),true);
$disburseId = $result['disburseId'];
$email = $result['email'];
$amountTransfer = $result['amountTransfer'];
$custRefNumber = $result['custRefNumber'];
$accountName = $result['accountName'];
$bankCode = $result['bankCode'];
$phoneNumber = $result['phoneNumber'];
$statusCode = $result['statusCode'];
$statusDesc = $result['statusDesc'];
$errorMessage = $result['errorMessage'];
$signature = $result['signature'];
if(!empty($email) && !empty($phoneNumber) && !empty($accountName) && !empty($custRefNumber) && !empty($amountTransfer) && !empty($disburseId) && !empty($signature))
{
$params = $email . $disburseId . $custRefNumber . $secretKey;
$calcSignature = hash('sha256', $params);
if($signature == $calcSignature)
{
//Your code here
echo "SUCCESS"; // Please response with success
}
else
{
throw new Exception('Bad Signature');
}
}
else
{
throw new Exception('Bad Parameter');
}
?>
{
"disburseId": "22851",
"email": "[email protected]",
"amountTransfer": 50000,
"custRefNumber": "000000001278",
"accountName": "Test Account",
"bankCode": "2010",
"phoneNumber": "082211789110",
"statusCode": "00",
"statusDesc": "Success",
"errorMessage": "",
"signature": "103573f87d9a0743de3fc6e499dbf988f03775b39451f95b4bc18cd09fa0959c"
}
Parameter
Method : HTTP POST
Type : application/json
Parameter | Tipe | Deskripsi |
---|---|---|
disburseId | string(255) | Disbursement ID dari Duitku, diperoleh setelah mendapat response dari proses inquiry. |
string(255) | Email merchant yang dipakai untuk registrasi Duitku. | |
amountTransfer | int | Tanpa kode desimal dan tanpa digit desimal. |
Untuk Indomaret: • Kelipatan dari 50.000. • Min 50.000. • Maks 1.000.000. |
||
Untuk Pos Indonesia: • Min 50.000. • Maks 2.000.000. |
||
custRefNumber | string(255) | Nomor referensi pelanggan. |
accountName | string(255) | Nama pelanggan. |
bankCode | string | Kode bank tujuan: |
• bankCode 2010 untuk Indomaret. • bankCode 2011 untuk Pos Indonesia. |
||
phoneNumber | string(255) | Nomor telepon pelanggan. |
statusCode | string(255) | Kode status 00 = Berhasil. Detail list yang tersedia dapat dilihat disini. |
statusDesc | string(255) | Deskripsi dari status code. |
errorMessage | string(255) | Pesan Error yang dikirimkan oleh Duitku. |
signature | string(255) | Formula: SHA256(email + disburseId + custRefNumber + secretKey). |
Inquiry Status
Inquiry status digunakan untuk melakukan pengecekan pada sistem Duitku apakah transaksi yang dilakukan sukses atau gagal.
Inquiry Status Request
Method : HTTP POST
Type : application/json
development :https://sandbox.duitku.com/webapi/api/disbursement/inquirystatus
Production : https://passport.duitku.com/webapi/api/disbursement/inquirystatus
Request Parameters
{
"disburseId": "12345",
"userId": 3551,
"email":"[email protected]",
"timestamp":1637304586325,
"signature":"d69db71fa1188a0d484a658692421d61d343454bd41a5f52d6b0569ff2b53c34"
}
<?php
$disburseId = '12345';
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$userId = 3551;
$email = '[email protected]';
$timestamp = round(microtime(true) * 1000);
$paramSignature = $email . $timestamp . $disburseId . $secretKey;
$signature = hash('sha256', $paramSignature);
$params = array(
'disburseId' => $disburseId,
'userId' => $userId,
'email' => $email,
'timestamp' => $timestamp,
'signature' => $signature
);
$params_string = json_encode($params);
$url = 'https://sandbox.duitku.com/webapi/api/disbursement/inquirystatus'; // Sandbox
// $url = 'https://passport.duitku.com/webapi/api/disbursement/inquirystatus'; // Production
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params_string))
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//execute post
$request = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 200)
{
$result = json_decode($request, true);
header('location: '. $result['paymentUrl']);
echo "email :". $result['email'] . "<br />";
echo "bankCode :". $result['bankCode'] . "<br />";
echo "bankAccount :". $result['bankAccount'] . "<br />";
echo "amountTransfer :". $result['amountTransfer'] . "<br />";
echo "accountName :". $result['accountName'] . "<br />";
echo "custRefNumber :". $result['custRefNumber'] . "<br />";
echo "responseCode :". $result['responseCode'] . "<br />";
echo "responseDesc :". $result['responseDesc'] . "<br />";
}
else
echo $httpCode;
?>
Parameter | Tipe | Wajib | Deskripsi | Contoh |
---|---|---|---|---|
disburseId | string(255) | Y |
Disbursement ID dari Duitku, diperoleh setelah mendapat response dari proses inquiry. | 12345. |
userId | int | Y |
User Id yang dikirimkan ketika inquiry. | 3551. |
string(255) | Y |
Email yang dikirimkan saat proses inquiry. | [email protected]. | |
timestamp | double | Y |
Unix Timestamp dalam miliseconds. | 1507024378000. |
signature | string(255) | Y |
Kode identifikasi transaksi. Berisikan parameter-parameter transaksi yang di hash menggunakan metode hashing SHA256. | Formula: SHA256(email + timestamp + disburseId + secretKey). |
Response Parameters
{
"bankCode": "014",
"bankAccount": "8760673566",
"amountTransfer": 50000.00,
"accountName": "Test Account",
"custRefNumber": "000000001664",
"responseCode": "00",
"responseDesc": "Success"
}
Parameter | Tipe | Deskripsi |
---|---|---|
bankCode | string | Kode bank yang dikirimkan saat proses inquiry. |
bankAccount | string | Nomor rekening bank tujuan saat proses inquiry. |
amountTransfer | int | Jumlah yang dikirimkan saat proses inquiry. |
accountName | string | Nama pemilik rekening tujuan, diperoleh setelah mendapat response dari proses inquiry. |
custRefNumber | string | 9 Digit Nomor referensi pelanggan yang akan dicetak ketika transaksi berhasil. |
responseCode | string | Respon kode dari duitku. Detail dan deskripsi dapat dilihat disini. |
responseDesc | string | Deskripsi dari responseCode. |
Inquiry Check Balance
Inquiry Check Balance digunakan untuk memeriksa saldo yang tersedia untuk Disbursement.
Inquiry Check Balance Request
Method : HTTP POST
Type : application/json
Development : https://sandbox.duitku.com/webapi/api/disbursement/checkbalance
Production : https://passport.duitku.com/webapi/api/disbursement/checkbalance
Request Parameters
{
"userId": 3551,
"email":"[email protected]",
"timestamp":1637308830041,
"signature":"c6be90ef7159efb476c4940ca662ffd7e586d2a0d16568187e0dbe25a67ae1a4"
}
<?php
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$userId = 3551;
$email = '[email protected]';
$timestamp = round(microtime(true) * 1000);
$paramSignature = $email . $timestamp . $secretKey;
$signature = hash('sha256', $paramSignature);
$params = array(
'userId' => $userId,
'email' => $email,
'timestamp' => $timestamp,
'signature' => $signature
);
$params_string = json_encode($params);
$url = 'https://sandbox.duitku.com/webapi/api/disbursement/checkbalance'; // Sandbox
// $url = 'https://passport.duitku.com/webapi/api/disbursement/checkbalance'; // Production
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params_string))
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//execute post
$request = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 200)
{
header('Content-Type: application/json');
$return = json_encode(json_decode($request), JSON_PRETTY_PRINT);
echo $return;
}
else
echo $httpCode;
?>
Parameter | Tipe | Wajib | Deskripsi | Contoh |
---|---|---|---|---|
userId | int | Y |
User Id yang dikirimkan ketika inquiry. | 3551. |
string(255) | Y |
Email yang dikirimkan saat proses inquiry. | [email protected]. | |
timestamp | double | Y |
Unix Timestamp in miliseconds. | 1507024378000. |
signature | string(255) | Y |
Kode identifikasi transaksi. Berisikan parameter-parameter transaksi yang di hash menggunakan metode hashing SHA256. | Formula: SHA256(email + timestamp + secretKey). |
Response Parameters
{
"userId": 3551,
"email": "[email protected]",
"balance": 7177.00,
"effectiveBalance": 7177.00,
"responseCode": "00",
"responseDesc": "Success"
}
Parameter | Tipe | Deskripsi |
---|---|---|
string | Email yang dikirimkan saat proses inquiry. | |
userId | Int | User Id yang dikirimkan saat proses inquiry. |
balance | Decimal | Saldo saat ini sebelum settlement. |
effectiveBalance | Decimal | Saldo Efektif yang bisa digunakan untuk disbursement. |
responseCode | String | Kode respons dari duitku. Detail dan deskripsi dapat dilihat disini. |
responseDesc | String | Deskripsi dari kode respons. |
Inquiry List Bank
API Inquiry List Bank digunakan untuk mendapatkan daftar bank yang tersedia.
Inquiry List Bank Request
Method : HTTP POST
Type : application/json
Development : https://sandbox.duitku.com/webapi/api/disbursement/listBank
Production : https://passport.duitku.com/webapi/api/disbursement/listBank
Request Parameters
{
"userId": 3551,
"email":"[email protected]",
"timestamp":1637308830041,
"signature":"c6be90ef7159efb476c4940ca662ffd7e586d2a0d16568187e0dbe25a67ae1a4"
}
<?php
$secretKey = 'de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d';
$userId = 3551;
$email = '[email protected]';
$timestamp = round(microtime(true) * 1000);
$paramSignature = $email . $timestamp . $secretKey;
$signature = hash('sha256', $paramSignature);
$params = array(
'userId' => $userId,
'email' => $email,
'timestamp' => $timestamp,
'signature' => $signature
);
$params_string = json_encode($params);
$url = 'https://sandbox.duitku.com/webapi/api/disbursement/listBank'; // Sandbox
// $url = 'https://passport.duitku.com/webapi/api/disbursement/listBank'; // Production
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params_string))
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//execute post
$request = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 200)
{
header('Content-Type: application/json');
$return = json_encode(json_decode($request), JSON_PRETTY_PRINT);
echo $return;
}
else
echo $httpCode;
?>
Parameter | Tipe | Wajib | Deskripsi | Contoh |
---|---|---|---|---|
userId | int | Y |
User Id yang dikirimkan ketika proses inquiry. | 3551. |
string(255) | Y |
Email yang dikirimkan saat proses inquiry. | [email protected]. | |
timestamp | double | Y |
Unix Timestamp dalam miliseconds. | 1507024378000. |
signature | string(255) | Y |
Kode identifikasi transaksi. Berisikan parameter-parameter transaksi yang di hash menggunakan metode hashing SHA256. | Formula: SHA256(email + timestamp + secretKey). |
Response Parameters
{
"responseCode": "00",
"responseDesc": "Success",
"Banks": [
{
"bankCode": "014",
"bankName": "BANK CENTRAL ASIA",
"maxAmountTransfer": "50000000"
},
{
"bankCode": "002",
"bankName": "BANK BRI",
"maxAmountTransfer": "100000000"
},
{
"bankCode": "1010",
"bankName": "OVO",
"maxAmountTransfer": "25000000"
}
{
"bankCode": "119",
"bankName": "BANK RIAU KEPRI",
"maxAmountTransfer": "100000000"
},
{
"bankCode": "118",
"bankName": "BANK NAGARI",
"maxAmountTransfer": "100000000"
}
]
}
Parameter | Tipe | Deskripsi |
---|---|---|
responseCode | String | Kode status 00 = Berhasil. |
responseDesc | String | Deskripsi Response code. |
bankCode | string | Kode bank. |
bankName | string | Nama bank. |
maxAmountTransfer | string | Jumlah transfer maksimum. |
Status Code
Kode Respons | Deskripsi |
---|---|
00 |
Disetujui/Sukses. |
EE |
General Error. |
TO |
Response Time Out dari Jaringan ATM Bersama (Jangan diulang). |
LD |
Masalah link antara Duitku dan jaringan ATM Bersama. |
NF |
Transaksi belum tercatat pada gateway Remittance. |
76 |
Nomor rekening tujuan tidak valid. |
80 |
Sedang menunggu callback. |
-100 |
Kesalahan lainnya (Jangan di ulang). |
-120 |
User ID tidak ditemukan/ tidak memiliki akses ke API ini. |
-123 |
User telah diblokir. |
-141 |
Nominal transfer tidak valid. |
-142 |
Transaksi sudah selesai. |
-148 |
Bank tidak mendukung tipe H2H. |
-149 |
Bank tidak terdaftar. |
-161 |
URL callback tidak ditemukan. |
-191 |
Signature tidak valid. |
-192 |
Nomor rekening masuk blacklist. |
-213 |
Alamat email salah. |
-420 |
Transaksi tidak ditemukan. |
-510 |
Dana tidak cukup. |
-920 |
Batas terlampaui. |
-930 |
IP tidak terdaftar dalam whitelist. |
-951 |
Waktu telah habis. |
-952 |
Parameter tidak valid. |
-960 |
Timestamp sudah tidak berlaku (5 menit). |
Vendor Response Code
Kode Respons | Deskripsi |
---|---|
00 |
Disetujui/Sukses. |
01 |
Refer to card issuer. |
05 |
Transaksi tidak diizinkan. |
12 |
Generic exception. |
14 |
Rekening tidak ditemukan. |
30 |
Format tidak valid. |
31 |
Kode bank tidak valid. |
51 |
Dana tidak mencukupi / melebihi batas kredit. |
66 |
Generic error. |
68 |
Respons diterima terlambat / Time out Saat mendapatkan respons ini, Anda harus menunggu konfirmasi bank. (Jangan diulang) |
88 |
Tagihan sudah dibayar. |
90 |
Beneficiary atau Mata Uang Tidak Valid. |
91 |
Kesalahan Transportasi ke Back End. |
Callback Status Code
Kode Status | Deskripsi |
---|---|
00 | Berhasil. |
01 | Gagal. |
68 | Pending (Jangan diulang). |
Error Code
Kode respons | Deskripsi |
---|---|
00 |
Disetujui/Sukses. |
01 |
Lihat penerbit kartu. |
03 |
Merchant tidak valid. |
04 |
Pick-up / capture card. |
05 |
Do not honor. |
12 |
Transaksi tidak valid. |
13 |
Jumlah tidak valid. |
14 |
Nomor kartu tidak valid (tidak ada nomor tersebut). |
15 |
Tidak ada penerbit seperti itu. |
20 |
Respon tidak valid. |
30 |
Kesalahan format. |
31 |
Bank tidak didukung switch. |
33 |
Kartu kedaluwarsa. |
36 |
Kartu terbatas. |
38 |
Percobaan PIN yang diizinkan terlampaui. |
39 |
Tidak ada akun kredit. |
40 |
Fungsi yang diminta tidak didukung. |
41 |
Kartu hilang. |
43 |
Kartu dicuri. |
51 |
Dana tidak mencukupi / melebihi batas kredit. |
52 |
Tidak ada rekening giro. |
68 |
Respons diterima terlambat / Time out Saat mendapatkan respons ini, Anda harus menunggu konfirmasi bank. (Jangan diulang) |
91 |
Issuer, Destination or switch is inoperative. |
Pengujian
Berikut adalah daftar pengujian disbursement yang dapat digunakan di Sandbox Environment:
Merchant Test Disbursement
User Test
UserID | SeckretKey | |
---|---|---|
3551 | [email protected] | de56f832487bc1ce1de5ff2cfacf8d9486c61da69df6fd61d5537b6b7d6d354d |
Skenario Disbursement Online
Berikut adalah daftar parameter BankAccount yang harus di set pada parameter disbursement inquiry dan disbursement transfer di Sandbox Environment.
Disbursement Inquiry Test
Bank Account | Response Code | Deskripsi |
---|---|---|
8760673566 | 00 | Berhasil |
8760673511 | TO | Waktu habis |
8760673512 | -100 | Kesalahan lainnya |
8760673513 | LD | Link Down |
8760673514 | 91 | DB bermasalah |
8760673515 | 89 | Link ke host Down |
Disbursement Transfer Test
Jika mendapat response TO, 68, atau -100, menandakan bahwa ada masalah ketika proses transfer. Tidak disarankan untuk melakukan proses ini untuk kedua kalinya.
Bank Account | Response Code | Deskripsi |
---|---|---|
8760673566 | 00 | Berhasil |
8760673559 | LD | Link Down |
8760673560 | 91 | DB bermasalah |
8760673561 | TO | Waktu habis |
8760673562 | -510 | Wallet tidak mencukupi |
8760673563 | 89 | Link ke host Down |
8760673564 | 68 | Waktu habis |
8760673565 | -100 | Kesalahan lainnya |
Skenario Disbursement Clearing
Berikut adalah daftar parameter BankAccount yang harus di set pada parameter disbursement Clearing inquiry dan disbursement Clearing transfer di Sandbox Environtment.
Clearing Inquiry Test
Bank Account | Response Code | Deskripsi |
---|---|---|
8760673466 | 00 | Berhasil. |
8760673411 | EE | Kesalahan Umum. |
8760673412 | TO | Response time out dari Jaringan ATM Bersama. |
8760673413 | LD | Link Bermasalah antara Duitku dan Jaringan ATM Bersama. |
8760673414 | NF | Transaksi belum tercatat di gateway Remittance. |
8760673415 | -100 | Kesalahan lainnya. |
8760673416 | 66 | Generic Error. |
8760673417 | 68 | Time out Saat mendapatkan respons ini, Anda harus menunggu konfirmasi bank. |
8760673418 | 88 | Tagihan sudah dibayar. |
8760673419 | 90 | Beneficiary atau Mata Uang Tidak Valid. |
8760673420 | 91 | Kesalahan Transportasi ke Back End. |
Clearing Transfer Test
Bank Account | Response Code | Deskripsi |
---|---|---|
8760673466 | 00 | LLG/RTGS/BIFAST |
8760673466 | 80 | H2H |
8760673451 | LD | |
8760673452 | NF | |
8760673453 | TO | |
8760673454 | -510 | |
8760673455 | 90 | |
8760673456 | 68 | |
8760673457 | 91 |
Skenario Cash Out
PhoneNumber | Deskripsi |
---|---|
08...100 s.d. 200 | Inquiry ➟ Berhasil ➟ Callback Berhasil-00 |
08...201 s.d. 300 | Inquiry ➟ Berhasil ➟ Callback Gagal-01 |
Daftar Bank
Daftar bank yang didukung pada fitur disbursement :
Supported Banks
Bank Code | Bank Name | BI FAST |
---|---|---|
002 | Bank BRI | ✓ |
008 | Bank Mandiri | ✓ |
009 | Bank BNI | ✓ |
011 | Bank Danamon | ✓ |
013 | Bank Permata | ✓ |
014 | Bank Central Asia | ✓ |
016 | Bank Maybank Indonesia | ✓ |
019 | Bank Panin | ✓ |
022 | CIMB Niaga | ✓ |
023 | Bank UOB Indonesia | ✓ |
028 | Bank OCBC NISP | ✓ |
031 | Citi Bank | ✓ |
036 | Bank CCB (Ex-Bank Windu Kentjana) | ✓ |
037 | Bank Artha Graha | ✓ |
042 | MUFG Bank | ✓ |
046 | Bank DBS | ✓ |
050 | Standard Chartered Bank | ✓ |
054 | Bank Capital | ✓ |
061 | ANZ Indonesia | ✓ |
069 | Bank Of China Indonesia | ✓ |
076 | Bank Bumi Arta | ✓ |
087 | Bank HSBC Indonesia | ✓ |
095 | Bank JTrust Indonesia | ✓ |
097 | Bank Mayapada | ✓ |
110 | Bank BJB | ✓ |
111 | Bank DKI | ✓ |
112 | Bank BPD DIY | ✓ |
113 | Bank Jateng | ✓ |
114 | Bank Jatim | ✓ |
115 | Bank Jambi | ✓ |
116 | Bank Aceh | ✓ |
117 | Bank Sumut | ✓ |
118 | Bank Nagari | ✓ |
119 | Bank Riau Kepri | ✓ |
120 | Bank Sumsel Babel | ✓ |
121 | Bank Lampung | ✓ |
122 | Bank Kalsel | ✓ |
123 | Bank Kalbar | ✓ |
124 | Bank Kaltimtara | ✓ |
125 | Bank Kalteng | ✓ |
126 | Bank Sulselbar | ✓ |
127 | Bank Sulut Go | ✓ |
128 | Bank NTB Syariah | ✓ |
129 | Bank BPD Bali | ✓ |
130 | Bank NTT | ✓ |
131 | Bank Maluku Malut | ✓ |
132 | Bank Papua | ✓ |
133 | Bank Bengkulu | ✓ |
134 | Bank Sulteng | ✓ |
135 | Bank Sultra | ✓ |
137 | Bank Banten | ✓ |
146 | Bank Of India Indonesia | ✗ |
147 | Bank Muamalat Indonesia | ✓ |
151 | Bank Mestika | ✓ |
152 | Bank Shinhan Indonesia | ✓ |
153 | Bank Sinarmas | ✓ |
157 | Bank Maspion Indonesia | ✓ |
161 | Bank Ganesha | ✓ |
164 | Bank ICBC Indonesia | ✓ |
167 | Bank QNB Indonesia | ✓ |
200 | Bank BTN | ✓ |
212 | Bank Woori Saudara | ✓ |
213 | Bank BTPN | ✓ |
405 | Bank Victoria Syariah | ✗ |
425 | Bank BJB Syariah | ✓ |
426 | Bank Mega | ✓ |
441 | Bank KB Bukopin | ✓ |
451 | Bank Syariah Indonesia | ✓ |
459 | Bank KROOM | ✗ |
472 | Bank Jasa Jakarta | ✓ |
484 | Bank KEB Hana | ✓ |
485 | MNC Bank | ✓ |
490 | Bank Neo Commerce | ✓ |
494 | Bank BRI Agroniaga | ✓ |
498 | Bank SBI | ✓ |
501 | Bank Digital BCA | ✓ |
503 | Bank Nobu | ✓ |
506 | Bank Mega Syariah | ✓ |
513 | Bank Ina Perdana | ✓ |
517 | Bank Panin Dubai Syariah | ✓ |
520 | Bank Prima Master | ✗ |
521 | Bank Syariah Bukopin | ✓ |
523 | Bank Sahabat Sampoerna | ✓ |
526 | Bank Oke Indonesia | ✓ |
531 | AMAR BANK | ✓ |
535 | SEA Bank | ✓ |
536 | Bank BCA Syariah | ✓ |
542 | Bank Jago | ✓ |
547 | Bank BTPN Syariah | ✓ |
548 | Bank Multiarta Sentosa | ✓ |
553 | Bank Mayora | ✓ |
555 | Bank Index Selindo | ✓ |
562 | Superbank (FAMA) | ✗ |
564 | Bank Mantap | ✓ |
566 | Bank Victoria International | ✓ |
567 | Allo Bank | ✓ |
600 | BPR SUPRA | ✗ |
688 | BPR KS | ✗ |
699 | BPR EKA | ✗ |
789 | IMkas | ✗ |
911 | LinkAja | ✗ |
945 | Bank Agris | ✗ |
947 | Bank Aladin Syariah | ✓ |
949 | Bank CTBC | ✓ |
950 | Bank Commonwealth | ✓ |
1010 | OVO | ✗ |
1011 | Gopay | ✗ |
1012 | DANA | ✗ |
1013 | Shopeepay | ✗ |
1014 | LinkAja Direct | ✗ |
Changelog
Version 1.2
Mar 2024
- Update Daftar Bank Pendukung BIFAST
Jun 2023
- Penambahan Metode BIFAST untuk Bank MUFG
Agu 2022
- Penambahan Type Clearing BIFAST
- Penambahan Daftar Bank Pendukung BIFAST
Jun 2022
- Penambahan Daftar Bank pendukung Dana
Mei 2022
- Penambahan Daftar Bank pendukung OVO, Shopeepay, dan Link Aja Direct
Jan 2022
- Penambahan dokumentasi alur transaksi Cash Out
- Penambahan dokumentasi Inquiry Cash Out
- Penambahan dokumentasi Callback Cash Out
- Penambahan postman collection Cash Out, Tranfers Online, dan Clearing
- Penambahan dokumentasi Callback Clearing
Version 1.1
Nov 2018
- Penambahan Skenario Dokumentasi
- Penambahan dokumentasi Inquiry Check Balance
Version 1.0
- Penambahan Skenario Dokumentasi